package co.com.bean.especialidad;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.Stateless;

import co.com.smart.maestro.infraestructure.dto.EspecialidadDTO;
import co.com.smart.maestro.infraestructure.dto.ResponseJson;
import co.com.smart.mapper.Mapper;
import co.com.smart.persistence.entity.EspecialidadFacadeLocal;
import co.com.smart.persistence.entity.dto.SmartEspecialidad;
import co.com.smart.session.DelegateContextEJB;
import co.com.smart.utilidades.Constantes;

/**
 * Session Bean implementation class DepartamentoBean
 */
@Stateless(mappedName = "ejb/EspecialidadBean")
public class EspecialidadBean implements EspecialidadBeanLocal{
	private EspecialidadFacadeLocal facade;
	/**
	 * Default constructor. 
	 */
	public EspecialidadBean() {
		facade = DelegateContextEJB.getEspecialidadFacadeLocal();
	}
	@Override
	public ResponseJson insertarEspecialidad(EspecialidadDTO especialidad) {
		ResponseJson response = new ResponseJson(); 
		try {
			facade.create(Mapper.mapperDtoToSmartEspecialidad(especialidad));
			response.setCodigo(Constantes.StatusResponse.OK.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Departamento almacenado.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Departamento almacenado.");
		} catch (Throwable e) {
			System.err.println("Error insertando el departamento -> " + e.getMessage());
			response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible almacenar el departamento.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
		}
		return response ;
	}
	@Override
	public ResponseJson editEspecialidad(EspecialidadDTO especialidad) {
		ResponseJson response = new ResponseJson(); 
		try {
			especialidad.setFhmodificacion(new Date());
			facade.edit(Mapper.mapperDtoToSmartEspecialidad(especialidad));
			response.setCodigo(Constantes.StatusResponse.OK.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Departamento editado.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Departamento editado.");
		} catch (Throwable e) {
			System.err.println("Error editando el departamento -> " + e.getMessage());
			response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
			response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible editar el departamento.");
			response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
		}

		return response ;
	}
	@Override
	public ResponseJson removeEspecialidad(EspecialidadDTO especialidad, boolean logic) {
		ResponseJson response = new ResponseJson(); 
		if(logic){
			try {
				especialidad.setFhretiro(new Date());
				especialidad.setFhmodificacion(new Date());
				facade.edit(Mapper.mapperDtoToSmartEspecialidad(especialidad));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Especialidad inactivado");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "Especialidad inactivado.");
			} catch (Throwable e) {
				System.err.println("Error editando el Especialidad -> " + e.getMessage());
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible inactivar el Especialidad.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}
		}else{
			try {
				facade.remove(Mapper.mapperDtoToSmartEspecialidad(especialidad));
				response.setCodigo(Constantes.StatusResponse.OK.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "especialidad eliminado");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_OK.getMensajeStatuss()+ "especialidad eliminado.");
			} catch (Throwable e) {
				System.err.println("Error eliminando el especialidad -> " + e.getMessage());
				response.setCodigo(Constantes.StatusResponse.ERROR.getStatus());
				response.setMensaje(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+ "No fue posible eliminar el especialidad.");
				response.setMensajeInterno(Constantes.MensajeResponse.MSJ_ERROR.getMensajeStatuss()+e.getMessage());
			}
		}
		return response ;
	}
	@Override
	public List<EspecialidadDTO> consultarAllEspecialidad() {
		List<EspecialidadDTO> dp = new ArrayList<EspecialidadDTO>();
		for (SmartEspecialidad entity : facade.findAll()) {
			if(entity.getSmFhretiro() == null){
				dp.add(Mapper.mapperSmartEspecialidadToDto(entity));
			}
		}
		return dp;
	}
	@Override
	public EspecialidadDTO consultarEspecialidadId(EspecialidadDTO especialidad) {
		EspecialidadDTO dp = new EspecialidadDTO();
		SmartEspecialidad entity  = facade.find(especialidad.getScespecialidad());
		if(entity != null && entity.getSmFhretiro() == null){
			dp = Mapper.mapperSmartEspecialidadToDto(entity);
		}
		return dp;
	}

	/*@Override
	public List<EspecialidadDTO> consultarEspecialidad(EspecialidadDTO especialidad) {
		List<EspecialidadDTO> dp = new ArrayList<EspecialidadDTO>();

		for (SmartEspecialidad entity :facade.findAll(Mapper.mapperDtoToSmartEspecialidad(especialidad))){
			if(entity.getSmFhretiro() == null){
				dp.add(Mapper.mapperSmartEspecialidadToDto(entity));
			}
		}

		return dp;
	}*/
}
